public class Flyable {
    void fly(){
        System.out.println("I can Fly!");
    }
}

class Duck{

    //依赖，调用成员的方法
//    void fly(Flyable f){
//        f.fly();
//    }
//
//    public static void main(String[] args) {
//        Flyable f = new Flyable();
//        Duck d = new Duck();
//        d.fly(f);
//    }



    //关联，加成员变量
//    Flyable f;
//
//    Duck(Flyable f) {
//        this.f = f;
//    }
//
//    void fly(){
//        f.fly();
//    }
//
//    public static void main(String[] args) {
//        Flyable f = new Flyable();
//        Duck d = new Duck(f);
//        d.fly();
//    }

    //组合
//    Flyable flyable = new Flyable();
//    void fly(){
//        flyable.fly();
//    }
//    public static void main(String[] args) {
//        Duck d = new Duck();
//        d.fly();
//    }

    //聚合
    Flyable f;
    Duck(Flyable f){
        this.f = f;
    }
    void fly(){
        f.fly();
    }

    public static void main(String[] args) {
        Flyable f = new Flyable();
        Duck d = new Duck(f);
        d.fly();
    }

}
